Printer that supports driverless printing

ABSTRACT

The disclosed embodiments provide a printer that facilitates driverless printing. This printer includes a discovery component which is configured to communicate with a client to facilitate selection of the printer by the client. This discovery component is also configured to provide capability information for the printer to the client. The printer also includes a transport component which is configured to receive printer data from the client, and a page-description-language component which is configured to print the printer data received from the client. Note that the capability information provided to the client enables the client to generate the printer data for the selected printer without the need for the client to maintain printer-specific software or printer-specific configuration information for the selected printer.

RELATED APPLICATIONS

This application claims priority under 35 U.S.C. §119 to U.S.Provisional Patent Application No. 61/302,916 filed 9 Feb. 2010,entitled “Walk-Up Printing without Drivers” by the same inventors as theinstant application (Attorney Docket No. APL-P8977USP1). Thisapplication also claims priority under 35 U.S.C. §119 to U.S.Provisional Patent Application No. 61/351,461 filed 4 Jun. 2010,entitled “Walk-Up Printing without Drivers” by the same inventors as theinstant application (Attorney Docket No. APL-P8977USP2). Thisapplication also claims priority under 35 U.S.C. §119 to U.S.Provisional Patent Application No. 61/378,832 filed 31 Aug. 2010,entitled “Walk-Up Printing without Drivers” by the same inventors as theinstant application (Attorney Docket No. APL-P8977USP3). Thisapplication also claims priority under 35 U.S.C. §119 to U.S.Provisional Patent Application No. 61/302,922 filed 9 Feb. 2010,entitled “Framework that Supports Driverless Printing” by the sameinventors as the instant (Attorney Docket No. APL-P9004USP1). Thisapplication also claims priority under 35 U.S.C. §119 to U.S.Provisional Patent Application No. 61/351,466 filed 4 Jun. 2010,entitled “Framework that Supports Driverless Printing” by the sameinventors as the instant application (Attorney Docket No.APL-P9004USP2). This application also claims priority under 35 U.S.C.§119 to U.S. Provisional Patent Application No. 61/358,306 filed 24 Jun.2010, entitled “Framework that Supports Driverless Printing” by the sameinventors as the instant application (Attorney Docket No.APL-P9004USP3). This application also claims priority under 35 U.S.C.§119 to U.S. Provisional Patent Application No. 61/378,827 filed 31 Aug.2010, entitled “Framework that Supports Driverless Printing” by the sameinventors as the instant application (Attorney Docket No.APL-P9004USP4).

This application is related to pending U.S. patent application Ser. No.not yet assigned, filed on the same day as the instant application,entitled “Walk-Up Printing without Drivers” by the same inventors as theinstant application (Attorney Docket No. APL-P8977US1). This applicationis also related to pending U.S. patent application Ser. No. not yetassigned, filed on the same day as the instant application, entitled“Framework That Supports Driverless Pringint” by the same inventors asthe instant application (Attorney Docket No. APL-P9004US1). Thisapplication is also related to pending U.S. patent application Ser. No.not yet assigned, filed on the same day as the instant application,entitled “Data Formats to Support Driverless Printing” by the sameinventors as the instant application (Attorney Docket No. APL-P9004US3).

BACKGROUND

1. Field

The disclosed embodiments relate to printers for computer systems. Morespecifically, the disclosed embodiments relate to a computer-basedprinting system that operates without having to manage printer-specificdriver software.

2. Related Art

Printers are often a problem for computer users. When a computer userinitially installs a printer, the cabling and power cords are typicallynot a problem to hook up. However, the user typically has to install aprinter-specific driver, which involves loading the driver from a diskor navigating to a website and downloading the driver. Even if theprinter driver is already loaded into the computer system, the useroften has to load and install an update for the driver from the printermanufacturer's website. These installation operations are time-consumingand commonly require the user to find and enter a long software-licensekey.

Hence, what is needed is a system that facilitates installing a printerwithout the above-described problems.

SUMMARY

The disclosed embodiments provide a system that facilitates driverlessprinting. This system includes a discovery component configured toidentify accessible printers and to facilitate selection of anaccessible printer, wherein the discovery component is also configuredto obtain capability information from accessible printers. The systemalso includes a transport component configured to transport data to theselected printer, wherein the transport component is also configured toobtain capability information from the selected printer. Finally, thesystem includes a page-description-language component configured togenerate printer data for the selected printer based on obtainedcapability information for the selected printer.

In some embodiments, the system provides an integrated framework thatenables the discovery component, the transport component and thepage-description-language component to be accessed by an application.

In some embodiments, the integrated framework includes one or moreapplication programming interfaces (APIs) that provide access to thediscovery component, the transport component and/or thepage-description-language component. These APIs enable a callingapplication to interact with other application code being called throughthe API. Various function calls, messages or other types of invocations,which further may include various kinds of parameters, can betransferred via the API between the calling application and the codebeing called. In addition, the API may provide the calling applicationcode the ability to use data types or classes defined in the API andimplemented in the called application code. A method for operatingthrough this API includes transferring one or more function calls,messages, other types of invocations or parameters via the API.

In some embodiments, while obtaining the capability information fromaccessible printers, the discovery component is configured to obtaincurrent status information from the accessible printers.

In some embodiments, the current status information can specify: whetherthe printer is off-line; whether the printer is busy; or whether anerror condition exists in the printer.

In some embodiments, the capability information for a printer canspecify, for example, the file sizes supported by the printer; thefile-format versions supported by the printer; the file-formatextensions supported by the printer; the color spaces supported by theprinter; the bit depths supported by the printer; or the resolutionssupported by the printer.

In some embodiments, the capability information obtained from theselected printer enables the system to generate printer data for theselected printer without the need for the system to maintainprinter-specific software or printer-specific configuration informationfor the selected printer.

Some embodiments include one or more application programming interfaces(APIs) in an environment with calling program code that interacts withother program code being called through the one or more interfaces.Various function calls, messages or other types of invocations, whichfurther may include various kinds of parameters, can be transferred viathe APIs between the calling program and the code being called. Inaddition, an API may provide the calling program code the ability to usedata types or classes defined within the API and implemented in thecalled program code.

At least certain embodiments include an environment with a callingsoftware component interacting with a called software component throughan API. A method for operating through an API in this environmentincludes transferring one or more function calls, messages, and othertypes of invocations or parameters via the API.

BRIEF DESCRIPTION OF THE FIGURES

FIG. 1 illustrates a printing system in accordance with the disclosedembodiments.

FIG. 2 illustrates components involved in performing a printingoperation in accordance with the disclosed embodiments.

FIG. 3 presents a flow chart illustrating the printing process inaccordance with the disclosed embodiments.

FIG. 4 presents a flow chart illustrating the driverless printingprocess in accordance with the disclosed embodiments.

FIG. 5 presents a flow chart illustrating the printing process from theprinter's perspective in accordance with the disclosed embodiments.

FIG. 6 illustrates the structure of a universal-raster-format-supported(URF-supported) key in accordance with the disclosed embodiments.

FIG. 7 illustrates the structure of a device-independent bitmapcontainer in accordance with the disclosed embodiments.

FIG. 8 illustrates how software components call each other through anAPI in accordance with the disclosed embodiments.

FIG. 9 illustrates how API calls can be made through a system stack inaccordance with the disclosed embodiments.

DETAILED DESCRIPTION

The following description is presented to enable any person skilled inthe art to make and use the disclosed embodiments, and is provided inthe context of a particular application and its requirements. Variousmodifications to the disclosed embodiments will be readily apparent tothose skilled in the art, and the general principles defined herein maybe applied to other embodiments and applications without departing fromthe spirit and scope of the disclosed embodiments. Thus, the disclosedembodiments are not limited to the embodiments shown, but are to beaccorded the widest scope consistent with the principles and featuresdisclosed herein.

The data structures and code described in this detailed description aretypically stored on a non-transitory computer-readable storage medium,which may be any device or medium that can store code and/or data foruse by a computer system. The non-transitory computer-readable storagemedium includes, but is not limited to, volatile memory, non-volatilememory, magnetic and optical storage devices such as disk drives,magnetic tape, CDs (compact discs), DVDs (digital versatile discs ordigital video discs), or other media capable of storing code and/or datanow known or later developed.

The methods and processes described in the detailed description sectioncan be embodied as code and/or data, which can be stored in anon-transitory computer-readable storage medium as described above. Whena computer system reads and executes the code and/or data stored on thenon-transitory computer-readable storage medium, the computer systemperforms the methods and processes embodied as data structures and codeand stored within the non-transitory computer-readable storage medium.Furthermore, the methods and processes described below can be includedin hardware modules. For example, the hardware modules can include, butare not limited to, application-specific integrated circuit (ASIC)chips, field-programmable gate arrays (FPGAs), and otherprogrammable-logic devices now known or later developed. When thehardware modules are activated, the hardware modules perform the methodsand processes included within the hardware modules.

Driverless Printing

The disclosed embodiments facilitate “driverless printing,” whichenables a computing device to print to a printer without having to worryabout installing or updating associated printer driver software. This isaccomplished by augmenting a discovery protocol (such as Bonjour™) andan associated network-printing protocol (such as IPP), so that theprotocols return printer capability information which is used togenerate printer data for a selected printer.

Note that the disclosed embodiments differ from existing systems whichneed to maintain specific drivers for each supported printer. In theseexisting systems, the features and capabilities for specific printersare stored in static capability files created by the printer vendors,such as a PostScript Printer Description (PPD) file, and these staticcapability files are stored on the mobile device itself. In contrast,the disclosed embodiments query a printer (not a static file) todetermine the “current” operational capabilities of a printer. Inaddition to the discovery protocol and the network-printing protocol,the disclosed embodiments also provide a page-description language thatspecifies the appearance of printed pages.

The disclosed embodiments additionally provide a framework which enablesan application to easily use the discovery protocol, thenetwork-printing protocol and the page-description language. Thisframework can be implemented using one or more APIs which enable anapplication to access these components. Details of the disclosedembodiments are described below, but first we describe the printingsystem.

Printing System

FIG. 1 illustrates a printing system 100 in accordance with thedisclosed embodiments. Printing system 100 includes a computing device102 and a printer 106. Computing device 102 can generally include anytype of computer system or computing device, such as a personal computersystem, a server computer system, a laptop computer, a notebookcomputer, a tablet computer, a personal digital assistant, a digitalmedia receiver (such as Apple TV™), a digital picture frame, a cellulartelephone or a portable navigation system. Printer 106 can generallyinclude any device or system capable of printing textual data or imagesonto some type of print media, such as paper or photo media. Forexample, printer 106 can comprise a stand-alone printer, oralternatively a printing system, which includes a print server that iscoupled to one or more printers.

Computing device 102 is coupled to printer 106 through network 104.Network 104 can generally include any type of communication channelcapable of coupling together network nodes. For example, network 104 caninclude a wireless network connection, such as a Bluetooth™ networkconnection; a cellular networking connection (e.g., a 3G/4G network oran Edge network); a networking connection based on the standardsdescribed in Institute for Electrical and Electronic Engineers (IEEE)802.11; a wireless personal-area networking (PAN) connection, such as anetwork connection based on the standards described in IEEE 802.15; orany peer-to-peer (wireless or wired) networking technology. Network 104can also include a wired network connection, such as a networkconnection based on the standards described in IEEE 802.3.

During the printing process, computing device 102 initially makescontact with printer 106 through a discovery protocol as is described inmore detail below. Next, after printer 106 is identified and selected,there are a number of ways that printing can be accomplished. Ifcomputing device 102 possesses a driver for printer 106, or if printer106 supports driverless printing, computing device 102 can use thedriver or the driverless printing protocol to generate printer data fora print job. The printer data can then be sent to printer 106 throughnetwork 104. This process is described in more detail below. (Note thatthe term “driverless printing” refers to a printing technique whichoperates without the need for printer-specific software orprinter-specific configuration on a computing device.)

Printing Components

FIG. 2 illustrates components involved in performing a printingoperation in accordance with the disclosed embodiments. Referring toFIG. 2, computing device 102 includes an application 202 which needs toperform a printing operation. For example, application 202 can include aprinting utility that allows a user to print a specific file.Alternatively, application 202 can include any type of general-purposeor special-purpose computer-based application that periodically needs toperform a printing operation, such as a word processor. Application 202makes calls to API 203, which provides a framework that facilitatesaccess to a number of components, including a discovery component 204, apage-description-language component 205 and a network-printing component206.

During operation, application 202 uses discovery component 204, whichimplements a discovery protocol (such as Bonjour™) to identify availableprinters and to facilitate selecting one of the identified printers.Note that discovery component 204 communicates with a correspondingdiscovery component 212 in printer 106 (illustrated by dashed line 230).Next, after a printer 106 is selected, application 202 usespage-description-language component 205 to render a print job to producecorresponding printer data 208. Printer data 208 is then sent tonetwork-printing component 206, which implements a network protocol forremote printing, such as an Internet Printing Protocol (IPP).Network-printing component 206 communicates printer data 208 to acorresponding network-printing component 214 within printer 106(illustrated by dashed line 232).

As mentioned above, printer 106 contains a discovery component 212 and anetwork-printing component 214. In addition, printer 106 includescomponents that support printing using, for example, the JPEG (JointPhotographic Experts Group) standard 216, the PDF (Portable DocumentFormat) standard 217, and a RF (Raster Format) standard 218. Thesecomponents send data through print controller 219 to print heads 220within printer 106, so that print controller 219 can translate the dataand print heads 220 can print the translated data onto some type ofprint media, such as paper.

Printing Process

FIG. 3 presents a flow chart illustrating the printing process inaccordance with the disclosed embodiments. First, the system uses adiscovery protocol, such as the Bonjour™ protocol, to identify printersthat can be accessed by computing device 102 (step 302). As mentionedabove, this discovery protocol also obtains capability information fromthe printer. Next, the system presents a list of available printers to auser (or an application) and allows the user (or the application) toselect one of the identified printers (step 304).

Next, the system checks interoperability of the selected printer (step306). For example, the system can obtain information from the printerindicating that the printer supports JPEG, PDF and RF, in which case thesystem can use any of the supported formats. On the other hand, if theinformation indicates the printer can only support RF, the system usesRF to send data to the printer.

Next, the system has a number of options. If the selected printersupports driverless printing, the system can obtain printer capabilityinformation from the selected printer and can generate printer data forthe printer based on the obtained printer capability information. Next,the system can send the generated printer data to the selected printer(step 308). As mentioned above, this capability information can beobtained from the selected printer during a query for the discoveryprotocol, or during a subsequent network-printing protocol query. On theother hand, if the mobile device contains a specific driver for theselected printer, the system can use the specific driver to generate andsend printer data to the selected printer (step 310). The system canalternatively send the print job to a cloud comprising one or moreservers that provide a printing service. This enables the cloud togenerate the printer data for the selected printer (step 312).

In general, the system can select among driverless printing, cloudprinting and using a local driver based on a number of factors, such aspower consumption and/or computational load. In one embodiment, thesystem uses driverless printing if possible, and if driverless printingis not supported, the system uses a local driver for the printer.Finally, if such a local driver is not supported, the system uses thecloud to generate the printer data.

Printer Capability Information

As mentioned above, the printer capability information can be obtainedfrom the selected printer during a query for the discovery protocol(Bonjour™), or during a subsequent network-printing protocol (IPP)query. More specifically, during the discovery protocol, the selectedprinter can return printer-specific information specifying what types ofdata the selected printer can accept and information specifying theselected printer's capabilities. Moreover, this printer-specificinformation enables the computer device to generate the printer data forthe selected printer without the need for the computer to maintainprinter-specific software or printer-specific configuration informationfor the selected printer. Once the mobile device is actuallycommunicating with the printer through IPP, the IPP protocol can providethe same printer-specific information. (This prevents having to cacheinformation between the discovery protocol and the network-printingprotocol.)

This printer capability information can specify attributes of the printmedia, such as media sizes, types (e.g., paper or photo media) andmargins. This printer capability information can also specify finishingattributes, such as attributes related to stapling, hole punching andbooklets. The printer capability information can additionally specifyinformation related to printer features, such as whether it can print ontwo sides of a page (duplex), which output bit to use, and which mediasource (tray) to use. The printer capability attributes can also specifyfile-related attributes, such as the file sizes supported by theprinter, the file-format versions supported by the printer, and thefile-format extensions supported by the printer. The printer capabilityinformation can also specify various printer capabilities, such as thecolor spaces supported by the printer, the bit depths supported by theprinter, and the resolutions supported by the printer.

This printer capability information can additionally specify currentstatus information obtained from printers. For example, this currentstatus information can specify: whether the printer is off-line; whetherthe printer is busy; or whether an error condition exists in theprinter. This current status information can be presented to the userwhile the user is selecting an available printer.

Driverless Printing

FIG. 4 presents a flow chart illustrating the driverless printingprocess in accordance with the disclosed embodiments. (This flow chartillustrates some of the operations which take place during thedriverless printing process which occurs in step 308 of FIG. 3.) First,the system obtains capability information for the selected printer (step402). As mentioned above, this capability information can be obtainedfrom the printer during a query which is part of the initial discoveryprotocol, or during a subsequent IPP query. Next, the system queues tothe selected printer (step 404) and allows a user (or an application) toselect a specific type of media for the print job (step 406).

The system then generates printer data for the selected printer based onthe obtained capability information (step 408). Next, the printer sendsthe printer data to the selected printer (step 410). Finally, the systemreceives status information for the selected printer, which indicateswhether the printer data was successfully printed (step 412).

Printing Process on the Printer Side

FIG. 5 presents a flow chart illustrating the printing process from theprinter's perspective in accordance with the disclosed embodiments.First, the printer uses a discovery component within the printer tocommunicate with a client to facilitate selection of the printer by theclient. During this discovery process, the discovery component canprovide capability information for the printer to the client (step 502).Next, the printer uses a transport component within the printer toreceive printer data from the client. During this process, the transportcomponent can also provide capability information for the printer to theclient (step 504). Finally, the printer can use apage-description-language component within the printer to print theprinter data received from the client (step 506).

Document Format Preferred

To facilitate driverless printing, some of the disclosed embodimentshave added new keys to the Internet Printing Protocol (IPP) standard. Inparticular, some embodiments include a new document-format-preferred key(as a MIME media type), which enables the printer to specify a“preferred” document format out of all of the document formats that aresupported by the printer. This preferred document format can be used toimprove performance. For example, the preferred document format may bemore efficient to print than other document formats supported by theprinter.

Note that the IPP standard already provides a document-format-supportedkey which specifies that a specific document format is supported by aprinter. However, the existing IPP standard does not provide any way toindicate which of the supported document formats is preferred.

URF-Supported Key

Some embodiments have also added a new “URF-supported key” to adiscovery protocol and a transport protocol. More specifically, someembodiments have added a new URF-supported key to the discovery protocolas part of a Bonjour™ TXT record, and have also added an analogousURF-supported key to the transport protocol as a new printer descriptionattribute for the IPP protocol.

This URF-supported key specifies a standardized set of capabilities thatare supported by a printer which enables a client to generate printerdata for the client without the need for the client to maintainprinter-specific software or printer-specific configuration informationfor the selected printer. This standardized set of capabilities isselected to enable the client to generate printer data for any type ofprinter.

In one embodiment, the standardized set of capabilities includes thefollowing which also appear in the diagram of the URF-supported key 600in FIG. 6,

-   -   (1) color spaces that are supported by the printer;    -   (2) bit depths that are supported by the printer for specific        color spaces;    -   (3) a maximum number of copies supported by the printer;    -   (4) whether duplex printing is supported by the printer;    -   (5) specific finishings that are supported by the printer (e.g.,        stapling, folding, hole punching);    -   (6) input slots supported by the printer;    -   (7) face-up/face-down input orientation;    -   (8) media types supported by the printer (e.g., plain paper,        glossy);    -   (9) output bins supported by the printer;    -   (10) face-up/face-down output orientation;    -   (11) supported print qualities; and    -   (12) supported resolutions.        In additional embodiments, the URF-supported key can include a        subset of these capabilities.

Device-Independent Bitmap Container

Some embodiments support a new device-independent bitmap container forprinter data. For example, the device-independent bitmap container canbe implemented as a Multipurpose Internet Mail Extensions (MIME)subtype.

This new device-independent bitmap container includes a file header, andat least one set of a page header and a page bitmap. In one embodiment,the page header can have a pre-determined format that specifies thefollowing attributes for a page to be printed by a printer. (Theseattributes also appear in the device-independent bitmap container 700which is illustrated in FIG. 7.)

(1) a bit depth;

(2) a color space;

(3) a duplex mode;

(4) a print quality;

(5) a media type;

(6) an input slot;

(7) an output bin

(8) a number of copies;

(9) one or more finishings;

(10) a width;

(11) a height; and

(12) a resolution.

In alternative embodiments, the page header can have a predeterminedformat that specifies a subset of these attributes.

Optimizations

In some embodiments, the system can perform optimizations to improvespeed, increase print quality and save battery power. This can beaccomplished by selecting a file type for the printer data that reducesthe number of computational operations involved in generating theprinter data, thereby improving speed and reducing the amount of powerconsumed by the computing device. For example, if a printer supports PDFand the computing device is printing a PDF file, it uses much lessbattery power and is faster to send the PDF file to the printer insteadof converting the PDF file into raster data and sending the raster datato the printer. (Note that, by saving computational operations andcomputational time, the system frees up resources and time to performother operations, for example to increase print quality.) Also, in thecase where the cloud returns the generated printer data to the computingdevice, the system can select a file format which reduces the size ofthe printer data file. This reduces the number of data transferoperations required to forward the printer data to the printer, andthereby improves speed and reduces the amount of power consumed by thecomputing device.

In another example, the system can save power by selecting betweendriverless printing and cloud printing based on whether or not the powerconsumed while transferring data to and from the cloud will be offset bythe power saved by off-loading the printer-related rendering operationsto the cloud. By using a cloud, power-consuming computational operationscan be off-loaded from a mobile device (that runs on battery power) to aserver within a cloud (that runs on wall power), which can potentiallysave a significant amount of battery power.

Defect Solutions

In some cases, a printer manufacturer may attempt to implement a printerwhich adheres to the driverless printer specification, but theimplementation may have one or more bugs. In this case, the system canmaintain a database containing such known bugs for specific printermodels. During a printing operation, the system can first perform alookup in the database, and if one or more known bugs exist for aprinter, the system can adjust how the printer data is generated tocompensate for these known bugs.

Application Programming Interfaces

One or more Application Programming Interfaces (APIs) may be used insome embodiments. An API is an interface implemented by a program codecomponent (hereinafter “API-implementing component”) that allows adifferent program code component (hereinafter “API-calling component”)to access and use one or more functions, methods, procedures, datastructures, classes, and/or other services provided by theAPI-implementing component. An API can define one or more parametersthat are passed between the API-calling component and theAPI-implementing component.

An API allows a developer of an API-calling component (which may be athird-party developer) to leverage specified features provided by anAPI-implementing component. There may be one API-calling component, orthere may be more than one such component. An API can be a source codeinterface that a computer system or program library provides in order tosupport requests for services from an application. An API can bespecified in terms of a programming language that can be interpreted orcompiled when an application is built.

In some embodiments the API-implementing component may provide more thanone API, each providing a different view of or that access differentaspects of the functionality implemented by the API-implementingcomponent. In other embodiments the API-implementing component mayitself call one or more other components via an underlying API, and thusbe both an API-calling component and an API-implementing component.

An API defines the language and parameters that API-calling componentsuse when accessing and using specified features of the API-implementingcomponent. For example, an API-calling component accesses the specifiedfeatures of the API-implementing component through one or more API callsor invocations (embodied, for example, by function or method calls)exposed by the API, and passes data and control information usingparameters via the API calls or invocations. The API-implementingcomponent may return a value through the API in response to an API callfrom an API-calling component. While the API defines the syntax andresult of an API call (e.g., how to invoke the API call and what the APIcall does), the API may not reveal how the API call accomplishes thefunction specified by the API call. Various API calls are transferredvia the one or more application programming interfaces between thecalling (API-calling component) and an API-implementing component.Transferring the API calls may include issuing, initiating, invoking,calling, receiving, returning, or responding to the function calls ormessages. The function calls or other invocations of the API may send orreceive one or more parameters through a parameter list or otherstructure. A parameter can be a constant, key, data structure, object,object class, variable, data type, pointer, array, list or a pointer toa function or method or another way to reference a data or other item tobe passed via the API.

Furthermore, data types or classes may be provided by the API andimplemented by the API-implementing component. Thus, the API-callingcomponent may declare variables, use pointers to, use or instantiateconstant values of such types or classes by using definitions providedin the API.

Generally, an API can be used to access a service or data provided bythe API-implementing component, or to initiate performance of anoperation or computation provided by the API-implementing component. Byway of example, the API-implementing component and the API-callingcomponent may be an operating system, a library, a device driver, anAPI, an application program, or other module (it should be understoodthat the API-implementing component and the API-calling component may bethe same or different type of module from each other). API-implementingcomponents may in some cases be embodied at least in part in firmware,microcode, or other hardware logic. In some embodiments, an API mayallow a client program to use the services provided by a SoftwareDevelopment Kit (SDK) library. In other embodiments an application orother client program may use an API provided by an ApplicationFramework.

In these embodiments the application or client program may incorporatecalls to functions or methods provided by the SDK and provided by theAPI, or use data types or objects defined in the SDK and provided by theAPI. An application framework may in these embodiments provide a mainevent loop for a program that responds to various events defined by theframework. The API allows the application to specify the events and theresponses to the events using the application framework. In someimplementations, an API call can report to an application thecapabilities or state of a hardware device, including those related toaspects such as input capabilities and state, output capabilities andstate, processing capability, power state, storage capacity and state,communications capability, etc., and the API may be implemented in partby firmware, microcode, or other low-level logic that executes in parton the hardware component.

The API-calling component may be a local component (i.e., on the samedata processing system as the API-implementing component) or a remotecomponent (i.e., on a different data processing system from theAPI-implementing component) that communicates with the API-implementingcomponent through the API over a network. It should be understood thatan API-implementing component may also act as an API-calling component(i.e., it may make API calls to an API exposed by a differentAPI-implementing component), and an API-calling component may also actas an API-implementing component by implementing an API that is exposedto a different API-calling component.

The API may allow multiple API-calling components written in differentprogramming languages to communicate with the API-implementing component(thus, the API may include features for translating calls and returnsbetween the API-implementing component and the API-calling component);however, the API may be also implemented in terms of a specificprogramming language.

FIG. 8 is a block diagram illustrating an exemplary API architecture,which may be used in some embodiments of the invention. As shown in FIG.8, the API architecture 800 includes the API-implementing component 810(e.g., an operating system, a library, a device driver, an API, anapplication program, or other module) that implements the API 820. TheAPI 820 specifies one or more functions, methods, classes, objects,protocols, data structures, formats and/or other features of theAPI-implementing component that may be used by the API-calling component830. The API 820 can specify at least one calling convention thatspecifies how a function in the API-implementing component receivesparameters from the API-calling component and how the function returns aresult to the API-calling component. The API-calling component 830(e.g., an operating system, a library, a device driver, an API, anapplication program, or other module) makes API calls through the API820 to access and use the features of the API-implementing component 810that are specified by the API 820. The API-implementing component 810may return a value through the API 820 to the API-calling component 830in response to an API call.

It will be appreciated that the API-implementing component 810 mayinclude additional functions, methods, classes, data structures, and/orother features that are not specified through the API 820 and are notavailable to the API-calling component 830. It should be understood thatthe API-calling component 830 may be on the same system as theAPI-implementing component 810 or may be located remotely and access theAPI-implementing component 810 using the API 820 over a network. WhileFIG. 8 illustrates a single API-calling component 830 interacting withthe API 820, it should be understood that other API-calling components,which may be written in different languages (or the same language) thanthe API-calling component 830, may use the API 820.

The API-implementing component 810, the API 820, and the API-callingcomponent 830 may be stored in a machine-readable medium, which includesany mechanism for storing information in a form readable by a machine(e.g., a computer or other data processing system). For example, amachine-readable medium includes magnetic disks, optical disks, randomaccess memory, read only memory, flash memory devices, etc.

In FIG. 9 (“Software Stack”), an exemplary embodiment, applications canmake calls to Services A or B using Service API and to Operating System(OS) using OS API. Services A and B can make calls to OS using OS API.

The foregoing descriptions of embodiments have been presented forpurposes of illustration and description only. They are not intended tobe exhaustive or to limit the present description to the formsdisclosed. Accordingly, many modifications and variations will beapparent to practitioners skilled in the art. Additionally, the abovedisclosure is not intended to limit the present description. The scopeof the present description is defined by the appended claims.

1. A printer that facilitates driverless printing, comprising: adiscovery component within the printer configured to communicate with aclient to facilitate selection of the printer by the client, wherein thediscovery component is also configured to provide capability informationfor the printer to the client; a transport component within the printerconfigured to receive printer data from the client; and apage-description-language component within the printer configured toprint the printer data received from the client; wherein the capabilityinformation provided to the client enables the client to generate theprinter data for the selected printer without the need for the client tomaintain printer-specific software or printer-specific configurationinformation for the selected printer.
 2. The printer of claim 1, whereinwhile providing the capability information to the client, the discoverycomponent is configured to provide current status information for theprinter to the client.
 3. The printer of claim 2, wherein the currentstatus information specifies one or more of the following: whether theprinter is off-line; whether the printer is busy; and whether an errorcondition exists in the printer.
 4. The printer of claim 1, wherein thecapability information for the printer specifies one or more of thefollowing: resolutions; color spaces; bit depths; input slots;face-up/face-down input orientation; output bins; face-up/face-downoutput orientation; duplex printing support; media types; copy support;supported finishings; and print quality.
 5. The printer of claim 4,wherein the capability information for the printer additionallyspecifies one or more of the following: file sizes; file-formatversions; and file-format extensions.
 6. The printer of claim 1, whereinthe transport component is also configured to provide capabilityinformation for the printer to the client.
 7. A method for facilitatingdriverless printing at a printer, comprising: using a discoverycomponent within the printer to communicate with a client to facilitateselection of the printer by the client, and to provide capabilityinformation for the printer to the client; using a transport componentwithin the printer to receive the printer data from the client; andusing a page-description-language component within the printer to printthe printer data received from the client; wherein the capabilityinformation provided to the client enables the client to generate theprinter data for the selected printer without the need for the client tomaintain printer-specific software or printer-specific configurationinformation for the selected printer.
 8. The method of claim 7, whereinwhile providing the capability information to the client, the discoverycomponent is configured to provide current status information for theprinter to the client.
 9. The method of claim 8, wherein the currentstatus information specifies one or more of the following: whether theprinter is off-line; whether the printer is busy; and whether an errorcondition exists in the printer.
 10. The method of claim 7, wherein thecapability information for a printer specifies one or more of thefollowing: resolutions; color spaces; bit depths; input slots;face-up/face-down input orientation; output bins; face-up/face-downoutput orientation; duplex printing support; media types; copy support;supported finishings; and print quality.
 11. The method of claim 10,wherein the capability information for the printer additionallyspecifies one or more of the following: file sizes; file-formatversions; and file-format extensions.
 12. The method of claim 7, whereinthe transport component is also configured to provide capabilityinformation for the printer to the client.
 13. A computer-readablestorage medium storing instructions that when executed by a computercause the computer to provide a system that facilitates driverlessprinting, wherein the instructions implement a number of components,including: a discovery component within the printer configured tocommunicate with a client to facilitate selection of the printer by theclient, wherein the discovery component is also configured to providecapability information for the printer to the client; a transportcomponent within the printer configured to receive printer data from theclient; and a page-description-language component within the printerconfigured to print the printer data received from the client; whereinthe capability information provided to the client enables the client togenerate the printer data for the selected printer without the need forthe client to maintain printer-specific software or printer-specificconfiguration information for the selected printer.
 14. Amachine-implemented method in an environment which uses an ApplicationProgramming Interface (API), the method comprising: transferring adiscovery call through the API to cause a discovery component tocommunicate with a client to facilitate selection of the printer by theclient, and to provide capability information for the printer to theclient; transferring a transport call through the API to cause atransport component to receive the printer data from the client; andtransferring a rendering call through the API to cause apage-description-language component to print the printer data receivedfrom the client; wherein the capability information provided to theclient enables the client to generate the printer data for the selectedprinter without the need for the client to maintain printer-specificsoftware or printer-specific configuration information for the selectedprinter.
 15. The machine-implemented method of claim 14, wherein whileobtaining the capability information from accessible printers, thediscovery component is configured to obtain current status informationfrom the accessible printers.
 16. The machine-implemented method ofclaim 15, wherein the transport component is also configured to obtaincapability information from the selected printer.
 17. A printer,comprising: a processor to execute instructions; and a memory coupledwith the processor to store instructions, which when executed by theprocessor cause the processor to: interface a discovery component of theprinter with an Application Programming Interface (API)-callingcomponent, wherein the discovery component communicates with a client tofacilitate selection of the printer by the client, and to providecapability information for the printer to the client; interface atransport component of the printer with the API-calling component,wherein the transport component receives the printer data from theclient; and interface a page-description-language component of the dataprocessing system with the API-calling component, wherein thepage-description-language component prints the printer data receivedfrom the client; wherein the capability information provided to theclient enables the client to generate the printer data for the selectedprinter without the need for the client to maintain printer-specificsoftware or printer-specific configuration information for the selectedprinter.
 18. The printer of claim 17, wherein while providing thecapability information to the client, the discovery component isconfigured to provide current status information for the printer to theclient.
 19. The printer of claim 17, wherein the transport component isalso configured to provide capability information for the printer to theclient.